 1.Spark Streaming之DStream输出操作
   
   输出操作定义 DStream 的输出操作。
   与 RDD 中的惰性求值类似，如果一个 DStream 及其派生出的 DStream 都没有被执
行输出操作，那么这些 DStream 就都不会被求值。
   如果 StreamingContext 中没有设定输出操作，整个流式作业不会启动。
   
   Output Operation   Meaning
   print()            在运行流程序的Driver上，输出DStream中每一
                      批次数据的最开始10个元素。用于开发和调试
   saveAsTextFiles    以text文件形式存储 DStream 的内容。每一批次
   (prefix, [suffix]) 的存储文件名基于参数中的prefix和suffix
     
   saveAsObjectFiles  以 Java 对象序列化的方式将Stream中的数据保
   (prefix, [suffix]) 存为 Sequence Files。每一批次的存储文件名
                      基于参数中的为"prefix-TIME_IN_MS[.suffix]"
   
   saveAsHadoopFiles  将Stream中的数据保存为 Hadoop files。
   (prefix,[suffix])  每一批次的存储文件名基于参数中的为
                      "prefix-TIME_IN_MS[.suffix]"
   foreachRDD(func)   最通用的输出操作。将函数 func 
                      应用于DStream 的每一个RDD上   
   通用的输出操作 foreachRDD，用来对 DStream 中的 RDD 进行任意计算。在foreachRDD
中，可以重用 Spark RDD 中所有的 Action 操作。需要注意的：
   连接不要定义在 Driver 中
   连接定义在 RDD的 foreach 算子中，则遍历 RDD 的每个元素时都创建连接，得不偿失
   应该在 RDD的 foreachPartition 中定义连接，每个分区创建一个连接
   可以考虑使用连接池